package gemsa.servlets.client;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import gemsa.modeles.ModeleReponse;
import gemsa.outils.GestionDroit;
import gemsa.beans.Projet;
import gemsa.beans.Reponse;

/**
 * Classe ServletGestionHistorique
 * @author Projet Dev Groupe 33
 * @version 1.0 Pr�finale : modifier une r�ponse dans l'historique ?
 */
 
@SuppressWarnings("serial")
public class ServletGestionHistorique extends HttpServlet 
{
	// Variables
	private DataSource datasource=null;
	private GestionDroit gestionDroit=null;
	
	// Traitements 
	public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
	{		
		// Initialisation de la gestion des droits
		gestionDroit=new GestionDroit(request);
		
		// On autorise uniquement les clients et utilisateurs anonymes
		if(gestionDroit.estAutorise(false,true,true))
		{				
			// R�cup�rer l'objet datasource du context de la servlet
			datasource=(DataSource)getServletContext().getAttribute("datasource");
	
			// Action a r�aliser
			String action=(String)request.getParameter("action");
			
			// Action par d�faut (liste)
			if(action==null || action.equalsIgnoreCase(""))
			{
				action="lister";
			}
			
			if(action.equals("lister"))
			{
				listerHistorique(request, response);
			}
			
			if(action.equals("ajouter"))
			{
				ajouterReponse(request, response);
			}
			
			if(action.equals("supprimer"))
			{
				supprimerReponse(request, response);
			}
			
			if(action.equals("supprimerdefinitif"))
			{
				supprimerDefinitifReponse(request, response);
			}
		}
		else
		{
			getServletContext().getRequestDispatcher("/pageFixe?action=erreur&erreurs=Vous n'êtes pas autorisé à afficher cette page!").forward(request, response);
		}
		
		// Vider l'objet datasource 
		this.datasource=null;
	}
	
	
	
	
	// Lister les reponses de l'historique
	private void listerHistorique(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
	{
		// On renvoie à la vue les messages d'erreurs et de succès
		request.setAttribute("succes",(String)request.getParameter("succes"));
		request.setAttribute("erreurs",(String)request.getParameter("erreurs"));
		
		// On renvoie à l'historique 
		getServletContext().getRequestDispatcher("/vues/utilisateurs/historique.jsp").forward(request,response);
	}
	
	
	// Ajouter une reponse dans l'historique
	private void ajouterReponse(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
	{
		// Variables
		Reponse reponse=null;
		Projet historique=null;
		ModeleReponse modeleReponse=null;
		int idReponse=0;
		
		try
		{
			// On récupère l'id de la reponse
			idReponse=Integer.parseInt(request.getParameter("idReponse"));
		}
		catch(Exception e) 
		{
			// Si l'id de la reponse passé en paramètre n'est pas un nombre, on initialise l'id à 0
			idReponse=0;
		}
		
		// On initialise le modèle
		modeleReponse=new ModeleReponse(datasource);
		
		// On r�cup�re la reponse correspondante, renvoie null si l'id de la reponse n'existe pas dans la base
		reponse=(Reponse)modeleReponse.getReponse(idReponse);
		
		// Si l'objet reponse est null (id non trouv�) on renvoie sur la page de listing avec un message d'erreur
		if(reponse!=null)
		{
			// On r�cup�re l'historique en session
			historique=(Projet)request.getSession().getAttribute("historique");
			
			// Si l'historique est null on le cr�e
			if(historique==null)
			{
				historique=new Projet();
			}
			
			// On ajoute la reponse à l'historique
			historique.ajouterReponse(reponse);
			
			// On remplace l'historique en session
			request.getSession().setAttribute("historique", historique);
			
			// On place un code d'erreur dans la requ�te (0 : ajout avec succ�s)
			request.setAttribute("codeErreur", 0);
		}	
		else
		{
			// On place un code d'erreur dans la requ�te (1 : reponse inconnue )
			request.setAttribute("codeErreur", 1);
		}
		
		if(request.getParameter("methode")!=null)
		{
			// On renvoie � la vue ajax des raccourcis qui int�gre la variable codeErreurs
			// getServletContext().getRequestDispatcher("/vues/ajax/raccourci.jsp").forward(request,response);
		}
		else
		{
			// On renvoie � la vue de l'historique
			response.sendRedirect("gestionHistorique?action=lister");
		}
	}
	
	
	
	// Supprimer une reponse dans l'historique
	private void supprimerReponse(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
	{
		// Variables
		Reponse reponse=null;
		Projet historique=null;
		ModeleReponse modeleReponse=null;
		int idReponse=0;
		
		try
		{
			// On r�cup�re l'id de la reponse
			idReponse=Integer.parseInt(request.getParameter("idReponse"));
		}
		catch(Exception e) 
		{
			// Si l'id de la reponse pass� en param�tre n'est pas un nombre, on initialise l'id � 0 
			idReponse=0;
		}
		
		// On initialise le mod�le
		modeleReponse=new ModeleReponse(datasource);
		
		// On r�cup�re la reponse correspondante, renvoie null si l'id de la reponse n'existe pas dans la base
		reponse=(Reponse)modeleReponse.getReponse(idReponse);
		
		// Si l'objet reponse est null (id non trouv�) on renvoie sur la page de listing avec un message d'erreur
		if(reponse!=null)
		{
			// On r�cup�re l'historique en session
			historique=(Projet)request.getSession().getAttribute("historique");
			
			// Si l'historique est null on le cr�e
			if(historique==null)
			{
				historique=new Projet();
			}
			
			// On supprime la reponse de l'historique
			historique.supprimerReponse(reponse);
			
			// On remplace l'historique en session
			request.getSession().setAttribute("historique", historique);
		}	
	
		// On renvoie � la vue de l'historique
		response.sendRedirect("gestionHistorique?action=lister");
	}
	
	
	// Supprimer les reponses d'un historique pour une reponse indiqu�e en param�tre
	private void supprimerDefinitifReponse(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
	{
		// Variables
		Reponse reponse=null;
		Projet historique=null;
		ModeleReponse modeleReponse=null;
		int idReponse=0;
		
		try
		{
			// On r�cup�re l'id de la reponse
			idReponse=Integer.parseInt(request.getParameter("idReponse"));
		}
		catch(Exception e) 
		{
			// Si l'id de la reponse pass� en param�tre n'est pas un nombre, on initialise l'id � 0 
			idReponse=0;
		}
		
		// On initialise le mod�le
		modeleReponse=new ModeleReponse(datasource);
		
		// On r�cup�re la reponse correspondante, renvoie null si l'id de la reponse n'existe pas dans la base
		reponse=(Reponse)modeleReponse.getReponse(idReponse);
		
		// Si l'objet reponse est null (id non trouv�) on renvoie sur la page de listing avec un message d'erreur
		if(reponse!=null)
		{
			// On r�cup�re l'historique en session
			historique=(Projet)request.getSession().getAttribute("historique");
			
			// Si l'historique est null on le cr�e
			if(historique==null)
			{
				historique=new Projet();
			}
			
			// On supprime la ligne correspondant � la reponse de l'historique 
			historique.supprimerReponse(reponse);
			
			// On remplace l'historique en session 
			request.getSession().setAttribute("historique", historique);
		}	
	
		// On renvoie � la vue de l'historique 
		response.sendRedirect("gestionHistorique?action=lister");
	}
	
	
	public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
	{
		doGet(request, response);
	}
	
	
}